/**
 * 解决两个数相加精度丢失问题
 * @param a
 * @param b
 * @returns {Number}
 */
export function floatAdd(a, b) {
	var c, d, e;
	if (undefined == a || null == a || '' == a || isNaN(a)) {
		a = 0;
	}
	if (undefined == b || null == b || '' == b || isNaN(b)) {
		b = 0;
	}
	try {
		c = a.toString().split('.')[1].length;
	} catch (f) {
		c = 0;
	}
	try {
		d = b.toString().split('.')[1].length;
	} catch (f) {
		d = 0;
	}
	e = Math.pow(10, Math.max(c, d));
	return (floatMul(a, e) + floatMul(b, e)) / e;
}
/**
 * 解决两个数相减精度丢失问题
 * @param num1
 * @param num2
 * @returns {Number}
 */
export function floatSub(num1, num2) {
	var baseNum, baseNum1, baseNum2;
	var precision; // 精度
	try {
		baseNum1 = num1.toString().split(".")[1].length;
	} catch (e) {
		baseNum1 = 0;
	}
	try {
		baseNum2 = num2.toString().split(".")[1].length;
	} catch (e) {
		baseNum2 = 0;
	}
	baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
	precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
	return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
};
/**
 * 解决两个数相乘精度丢失问题
 * @param a
 * @param b
 * @returns {Number}
 */
export function floatMul(a, b) {
	var c = 0,
		d = a.toString(),
		e = b.toString();
	try {
		c += d.split('.')[1].length;
	} catch (f) {}
	try {
		c += e.split('.')[1].length;
	} catch (f) {}
	return (Number(d.replace('.', '')) * Number(e.replace('.', ''))) / Math.pow(10, c);
}
/**
 * 解决两个数相除精度丢失问题
 * @param a
 * @param b
 * @returns
 */
export function floatDiv(a, b) {
	var c,
		d,
		e = 0,
		f = 0;
	try {
		e = a.toString().split('.')[1].length;
	} catch (g) {}
	try {
		f = b.toString().split('.')[1].length;
	} catch (g) {}
	return (c = Number(a.toString().replace('.', ''))), (d = Number(b.toString().replace('.', ''))), floatMul(c / d, Math.pow(10, f - e));
}
/**
 * 保留有效数字并且4舍5入
 * @param {*} v 表示要转换的值 表示要保留的位数
 * @param {*} e 表示要保留的位数
 * @returns
 */
export function round(v, e) {
	var t = 1;
	for (; e > 0; t *= 10, e--);
	for (; e < 0; t /= 10, e++);
	return Math.round(v * t) / t;
}
/**
 * 转为千位符
 * @returns
 */
export function numFormat(num) {
	if (num == null) num = 0;
	num = num.toString().split('.'); // 分隔小数点
	var arr = num[0].split('').reverse(); // 转换成字符数组并且倒序排列
	var res = [];
	for (var i = 0, len = arr.length; i < len; i++) {
		if (i % 3 === 0 && i !== 0) {
			res.push(','); // 添加分隔符
		}
		res.push(arr[i]);
	}
	res.reverse(); // 再次倒序成为正确的顺序
	if (num[1]) {
		// 如果有小数的话添加小数部分
		res = res.join('').concat('.' + num[1]);
	} else {
		res = res.join('');
	}
	return res;
}